package cn.gdust.servlet;

import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

@WebServlet("/VideoIOServlet")
public class VideoIOServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) {
        // 获取视频文件路径
        String fileName = request.getParameter("fileName");
        // 获取视频文件的绝对路径
        String filePath = getServletContext().getRealPath("/Videos/" + fileName);

        // 设置响应类型
        response.setContentType("video/mp4");

        // 设置Content-Disposition响应头控制浏览器以下载形式打开文件
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);

        // 读取视频文件并发送给客户端
        try {
            FileInputStream fis = new FileInputStream(filePath); // 创建一个文件输入流对象，用于读取视频文件
            byte[] buffer = new byte[1024]; // 创建一个字节数组，用于存放读取的数据
            int len; // 定义一个变量，用于记录每次读取的字节数
            OutputStream os = response.getOutputStream(); // 创建一个输出流对象，用于向客户端发送数据
            while ((len = fis.read(buffer)) > 0) { // 循环读取视频文件
                os.write(buffer, 0, len); // 将读取的数据写入输出流
            }
            os.flush(); // 刷新输出流
            os.close(); // 关闭输出流
            fis.close(); // 关闭文件输入流
        } catch (IOException e) { // 捕获IO异常
            e.printStackTrace(); // 打印异常信息
        }

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        doGet(request, response);
    }
}
